//package com.dragon.common.core.servlet;
//
//import org.springframework.util.ObjectUtils;
//import org.springframework.util.StreamUtils;
//
//import javax.servlet.ServletInputStream;
//import javax.servlet.ReadListener;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequestWrapper;
//import java.io.ByteArrayInputStream;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.io.IOException;
//import java.util.Collections;
//import java.util.Enumeration;
//import java.util.HashMap;
//import java.util.Map;
//
//public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {
//
//    private final byte[] bodyByteArray;
//    private final Map<String, String[]> parameterMap;
//
//    public CustomHttpServletRequestWrapper(HttpServletRequest request) {
//        super(request);
//        this.bodyByteArray = getByteBody(request);
//        this.parameterMap = super.getParameterMap();
//    }
//
//    public CustomHttpServletRequestWrapper(HttpServletRequest request, Map<String, String[]> parameterMap) {
//        super(request);
//        this.bodyByteArray = getByteBody(request);
//        this.parameterMap = new HashMap<>(parameterMap);
//    }
//
//    @Override
//    public BufferedReader getReader() {
//        return ObjectUtils.isEmpty(this.bodyByteArray) ? null
//                : new BufferedReader(new InputStreamReader(getInputStream()));
//    }
//
//    @Override
//    public ServletInputStream getInputStream() {
//        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(this.bodyByteArray);
//        return new ServletInputStream() {
//            @Override
//            public boolean isFinished() {
//                return byteArrayInputStream.available() == 0;
//            }
//
//            @Override
//            public boolean isReady() {
//                return true;
//            }
//
//            @Override
//            public void setReadListener(ReadListener readListener) {
//                // Do nothing
//            }
//
//            @Override
//            public int read() {
//                return byteArrayInputStream.read();
//            }
//        };
//    }
//
//    private static byte[] getByteBody(HttpServletRequest request) {
//        byte[] body = new byte[0];
//        try {
//            body = StreamUtils.copyToByteArray(request.getInputStream());
//        } catch (IOException e) {
//            log.error("解析流中数据异常", e);
//        }
//        return body;
//    }
//
//    @Override
//    public Map<String, String[]> getParameterMap() {
//        return parameterMap;
//    }
//
//    @Override
//    public String[] getParameterValues(String name) {
//        return parameterMap.get(name);
//    }
//
//    @Override
//    public String getParameter(String name) {
//        String[] values = parameterMap.get(name);
//        return values != null ? values[0] : null;
//    }
//
//    @Override
//    public Enumeration<String> getParameterNames() {
//        return Collections.enumeration(parameterMap.keySet());
//    }
//}
